// SeedingService.java (接口)
package com.bjtu.ptsite.service;

import com.bjtu.ptsite.model.TorrentComment;
import com.bjtu.ptsite.model.TorrentCommentRequest;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 *
 * @author Zehao Wang, Junjie Zhang, Yutao Wei
 *
 */
public interface SeedingService {
    /**
     * 更新做种状态并计算积分
     * @param seedId 种子ID
     * @param userId 用户ID
     */
    void updateSeedingStatus(Long seedId, int userId);


    /**
     * 创建新的种子评论
     * @param torrentCommentRequest 评论请求对象，包含：
     *                              - 种子ID（torrentId）
     *                              - 用户ID（userId）
     *                              - 评论内容（content）
     *                              - 父评论ID（可选，用于回复评论）
     * @throws IllegalArgumentException 当评论内容为空或关键参数缺失时抛出
     * &#064;description  允许用户对种子发表评论或回复已有评论
     */
    void comment(TorrentCommentRequest torrentCommentRequest);

    /**
     * 获取种子评论列表（支持分页和条件查询）
     * @param req 查询条件对象，支持：
     *            - 种子ID（torrentId，必选，查询指定种子的评论）
     *            - 页码（pageNum，默认1）
     *            - 每页大小（pageSize，默认10）
     *            - 排序方式（可选，按时间或点赞数排序）
     * @return 包含评论列表的分页信息，包含总记录数、当前页数据等
     * &#064;description  返回指定种子的评论列表，支持分页展示和条件过滤
     */
    PageInfo<TorrentComment> getCommentList(TorrentCommentRequest req);

    /**
     * 处理评论点赞操作
     * @param torrentCommentRequest 点赞请求对象，包含：
     *                              - 评论ID（commentId，必选）
     *                              - 用户ID（userId，必选）
     * @throws IllegalArgumentException 当评论ID或用户ID缺失时抛出
     * &#064;description  支持用户对评论进行点赞或取消点赞（重复点击视为取消）
     */
    void likes(TorrentCommentRequest torrentCommentRequest);

    /**
     * 删除指定评论
     * @param torrentCommentRequest 删除请求对象，包含：
     *                              - 评论ID（commentId，必选）
     *                              - 用户ID（userId，必选）
     * @throws IllegalArgumentException 当评论ID或用户ID缺失时抛出
     * @throws SecurityException 当用户无权限删除该评论时抛出（如非作者或管理员）
     * &#064;description  仅允许评论作者或管理员删除评论，删除后不可恢复
     */
    void deleteComment(TorrentCommentRequest torrentCommentRequest);
    /**
     * 检查用户是否已经点赞该评论
     * @param userId 用户ID
     * @param id 评论ID
     * @return 如果用户已经点赞该评论，则返回true；否则返回false
     * &#064;description  检查用户是否已经对该评论点赞
     */
    boolean likeExist(Long userId,Long id);
    /**
     * 检查用户是否已经点赞该评论
     * @param id 评论ID
     * @return 如果用户已经点赞该评论，则返回true；否则返回false
     * &#064;description  检查用户是否已经对该评论点赞
     */
    TorrentComment selectById(Long id);
}